//=========学生类型的数据结构======
#ifndef SLINKLIST_H
#define SLINKLIST_H

#include <stdio.h>
#include <stdbool.h>
//链表节点定义
typedef struct sNode
{
	int id;			//学号(遍历) 8位数
	char password[20];//密码(遍历) 20位数
	char name[30];	//姓名(三个char类型存放一个中文字符) 3*10
	char sex[5]; 	//性别
	char idcard[19];//身份证18+1 
	char phone[12];	//手机号11+1
	char state;//学生状态 0:在读 1:退学

	float ChineseScore;
	float MathScore;
	float EnglishScore;

	float TotalScore;	//三科的总分
	int ScoreRank;	//总分的排名

	struct sNode *prev;
	struct sNode *next;
}sNode;
//链表定义
typedef struct
{
	struct sNode *head;
	struct sNode *tail;
}*sLink;
//分数结果
typedef struct
{
	float CHScore,MHScore,EHScore;	//单科最高分
	double CScore,MScore,EScore; 	//单科总分
	float CAScore,MAScore,EAScore; 	//单科平均分
}*sResult;

//创建链表
sLink Create_sLink();
//工号查找,返回该工号的所有信息[注意密码],用于确认密码和查询或修改其他信息
sNode* Search_sLink(sLink SL,int id);
//放入基本数据
bool Insert_sLink(sLink SL,int id,char password[],char name[],char sex[],char idcard[],char phone[],char state);
//放入成绩数据,顺便计算三科总分
bool Score_sLink(sLink SL,int id,float ChineseScore,float MathScore,float EnglishScore);
//按总分进行快速排序,顺便计算三科总分排名
bool Sort_sLink(sLink SL,sNode* leftNode,sNode* rightNode,int index);
//遍历,单科最高分:float CHScore,MHScore,EHScore 单科总分:double CScore,MScore,EScore 单科平均分:float CAScore,MAScore,EAScore 
sResult Result_sLink(sLink SL);

//初始化链表
bool Init_sLink(sLink SL);

//遍历,用于[测试]
bool Travel_sLink(sLink SL);

#endif //SLINKLIST_H
